

https://leetcode.cn/problems/number-of-enclaves/description/
//class Solution {
//public:
//    int dx[4] = { -1,1,0,0 };
//    int dy[4] = { 0,0,-1,1 };
//    int numEnclaves(vector<vector<int>>& grid) {
//        int m = grid.size(), n = grid[0].size();
//
//        queue<pair<int, int>> q;
//        vector<vector<bool>> dist(m, vector<bool>(n, false));
//
//        for (int i = 0; i < m; i++) {
//            if (grid[i][0] == 1) {
//                dist[i][0] = true;
//                q.emplace(i, 0);
//            }
//            if (grid[i][n - 1] == 1) {
//                dist[i][n - 1] = true;
//                q.emplace(i, n - 1);
//            }
//        }
//        for (int j = 1; j < n - 1; j++) {
//            if (grid[0][j] == 1) {
//                dist[0][j] = true;
//                q.emplace(0, j);
//            }
//            if (grid[m - 1][j] == 1) {
//                dist[m - 1][j] = true;
//                q.emplace(m - 1, j);
//            }
//        }
//
//        while (q.size()) {
//            auto [a, b] = q.front();
//            q.pop();
//            for (int k = 0; k < 4; k++) {
//                int x = dx[k] + a;
//                int y = dy[k] + b;
//                if (x >= 0 && x < m && y >= 0 && y < n && !dist[x][y] && grid[x][y] == 1) {
//                    dist[x][y] = true;
//                    q.push({ x,y });
//                }
//            }
//        }
//
//        int ret = 0;
//        for (int i = 0; i < m; i++) {
//            for (int j = 0; j < n; j++) {
//                if (grid[i][j] == 1 && !dist[i][j]) {
//                    ret++;
//                }
//            }
//        }
//        return ret;
//    }
//};

https://leetcode.cn/problems/01-matrix/description/
//class Solution {
//public:
//
//    int dx[4] = { 1,-1,0,0 };
//    int dy[4] = { 0,0,-1,1 };
//    vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {
//        int m = mat.size(), n = mat[0].size();
//
//        vector<vector<int>> dist(m, vector<int>(n, -1));
//        queue<pair<int, int>> q;
//        for (int i = 0; i < m; i++) {
//            for (int j = 0; j < n; j++) {
//                if (mat[i][j] == 0) {
//                    q.push({ i,j });
//                    dist[i][j] = 0;
//                }
//            }
//        }
//
//        while (q.size()) {
//            auto [a, b] = q.front();
//            q.pop();
//            for (int k = 0; k < 4; k++) {
//                int x = a + dx[k];
//                int y = b + dy[k];
//                if (x >= 0 && x < m && y >= 0 && y < n && dist[x][y] == -1) {
//                    dist[x][y] = dist[a][b] + 1;
//                    q.push({ x,y });
//                }
//            }
//        }
//        return dist;
//    }
//};